import type { StateCodeMapKey } from "@/utils/websocket/stateCodeMap";

/** 设备类型 */
export type DeviceType = {
  /** 机构名称 */
  officeName: string;

  /** 机构编号 */
  officeCode: string;

  /** 设备名称 */
  name: string;

  /** 设备编号 */
  code: string;

  /** 功能区域 */
  area: string;

  /** IP地址 */
  ip: string;

  /**
   * 设备状态
   * - 0 正常
   * - 1 暂停
   * - 2 停止
   * - 3 未认证
   * - 4 未申请
   */
  status: "0" | "1" | "2" | "3";

  /** 设备厂家 */
  factory: string;

  /** 入网日期 */
  intoNetworkTime: string;

  /** 规格型号 */
  model: string;

  /**
   * 播放方式
   * - 1 横屏
   * - 2 竖屏
   */
  playMode: "1" | "2";

  ///////////////// 读取系统的参数 ///////////////////

  /** 操作系统 + 系统版本 */
  systemVersion: string;

  /** mac地址 */
  mac: string;

  /** android uuid */
  androidId: string;

  /** 分辨率 */
  resolutionRatio: string;

  /** 应用版本 */
  softwareVersion: string;

  /** 说明 */
  remarks: string;

  /** 设备的唯一id */
  uuid: string;
};

/**
 * 字典key
 * 播放方式 : m180_play_mode
 * 功能区域 : m180_area
 * 规格型号 : m180_model
 * 设备厂家 : m180_factory
 * 设备尺寸 : m180_size
 * 单双面 : m180_face
 * 机构数据 : dept
 */
export type WddmtDeptField =
  | "m180_play_mode"
  | "m180_area"
  | "m180_model"
  | "m180_factory"
  | "m180_size"
  | "m180_face"
  | "dept";

/** 排期类型 */
export type ScheduleType = {
  /** 数据ID */
  id: string;
  /** 创建人员 */
  createUser: string;
  /** 创建人员名称 */
  createUserName: string;
  /** 机构名称 */
  officeName: string;
  /** 机构编号 */
  officeCode: string;
  /** 排期名称 */
  name: string;
  /** 开始日期 */
  startDate: string;
  /** 结束日期 */
  endDate: string;
  /** 开始时间 */
  startTime: string;
  /** 排期code */
  code: string;
  /**
   * 当前状态
   * - 0: 在用
   * - 1: 暂停
   * - 2: 停止
   */
  status: '0' | '1' | '2';
  /**
   * 排期播放频次
   * - 1 每天
   * - 3 星期
   * 如果为 3, 则 playWeeks 存储周几播放
   */
  playFrequency: "1" | "3";
  /** 存储星期几 */
  playWeeks: string;
};

/** 排期关联素材中间对象 */
export type ScheduleLinkMaterial = {
  /** 排期code */
  planCode: string;
  /** 排期素材列表的id */
  id: string;
  /** 关联素材code */
  materialCode: string;
  /** 排序 */
  sort: number;
  /** 开始时间, 时:分:秒 */
  startTime: string;
  /** 结束时间, 时:分:秒 */
  endTime: string;
  /** 关联的素材信息 */
  material: MaterialType;
};

/** 素材类型 */
export type MaterialType = {
  /** 排序 */
  sort: number;
  /** 开始时间, 时:分:秒 */
  startTime: string;
  /** 结束时间, 时:分:秒 */
  endTime: string;

  /** 数据ID */
  id: string;
  /** 机构名称 */
  officeName: string;
  /** 机构编号 */
  officeCode: string;
  /** 素材编号 */
  code: string;
  /** 素材名称 */
  name: string;
  /**
   * 素材类型
   * - 1 图片
   * - 2 文档
   * - 3 音频
   * - 4 视频
   */
  type: "1" | "2" | "3" | "4";
  /**
   * 免审标志
   * - 1 是
   * - 0 否
   */
  isUnAudit: "1" | "0";
  /**
   * 垫片标志
   * - 1 是
   * - 2 否
   */
  isShim: "1" | "2";
  /** 入库日期 */
  putLibTime: string;
  /** 素材时长, 格式(hh:mm:ss) */
  duration: string;
  /** 文件大小, 单位字节 */
  size: string;
  /** 分辨率, 格式 width*height */
  resolution: string;
  /** 文件地址, 例子: /api/m000/minio/down/m180/xxx.mp4?name=hello.mp4&isChunk=1 */
  file: string;
  /**
   * 审核标志
   * - 0 未审核
   * - 1 审核通过
   * - 2 审核中
   * - 3 免审
   */
  auditFlag: "0" | "1" | "2" | "3";
  /** 说明 */
  remarks: string;
  /**
   * 当前状态
   * - 0 正常
   * - 1 暂停
   * - 2 停止
   */
  status: "0" | "1" | "2";
};

/** 指令表 */
export type DeviceCmdType = {
  /** 主键ID */
  id: string;
  /** 批次号 */
  batchId: string;
  /** 设备编号 */
  deviceCode: string;
  /** 
   * 类型
   * - 1: 日志上传
   * - 2: 数据上传
   */
  type: "1" | "2";
  /**
   * 1: 发送数据(后台发送的指令数据)
   * 2: 收取数据(app回传给前台的指令数据)
   */
  sarType: '1' | '2';
  /** 命令码 */
  cmd: StateCodeMapKey,
  /** 文件 */
  file: string;
  /** 后台发送指令的数据 */
  msg: string;
  /** 状态 */
  status: string;
  /** 创建部门 */
  createDept: string;
  /** 所属机构名称 */
  createDeptName: string;
  /** 创建用户 */
  createUser: string;
  /** 用户名称 */
  createUserName: string;
  /** 创建时间 */
  createTime: string;
  /** 修改用户 */
  updateUser: string;
  /** 修改时间 */
  updateTime: string;
  /** 备注信息 */
  remarks: string;
  /** 租户 */
  tenantId: string;
};
